#include <iostream>
#include <functional>
#include <unistd.h>

class Test{
public:
    Test(){std::cout << "构造 Test()" << std::endl;}
    ~Test() {std::cout << "析构 ~Test()" << std::endl;}
};

void del(const Test *t, int num){
    std::cout << num << std::endl;
    delete t;
}

int main(){
    Test* t = new Test();
    /*bind作⽤也可以简单理解为给⼀个函数绑定好参数，然后返回⼀个参数已经设定好或者预留好的函数， 可以在合适的时候进行调用*/ 
 
    /*比如：del函数，要求有两个参数，⼀个Test*， ⼀个int， 想要基于del函数，适配生成⼀个新的函数，
 这个函数固定第1个参数传递t变量， 第二个参数预留出来，在调用的时候进⾏设置 */
    std::function<void(int)> f = std::bind(del, t, std::placeholders::_1);
    f(10);
    while(1) sleep(1);
    return 0;
}